前面有發了一篇sui move的三明治製作,後來想想覺得如果都沒人來做教程,不如就從自己來開始,把所學習到的做一個反饋。
主要是想要提供一個機會,創造一個生態,讓每個人都有機會參與sui這未來的大趨勢(個人觀點)。
如前一篇文所說,目前也才剛學一陣子,本身也沒什麼程式基礎,真的很嫩,很多東西還不會,所以接下來所做的教程,充其量只是一個給有興趣想學習的人,及不了解suimove的人一個接口,歡迎大家教學相長,互相切磋~ 未來起飛後,有機會回頭再帶帶小弟 XD
個人有創立一個line的社群,如果有興趣學習move或者想了解區塊鏈的朋友,歡迎加入。
https://line.me/ti/g2/YrcbyMdn__bww_2FW7Ui4r91zh7QL2vM7qavIg?utm_source=invitation&utm_medium=link_copy&utm_campaign=default
-- 開發環境 --
軟體:本身是使用 Visual Studio Code, 本來有用CLion,不過因為他要付費,所以就先用VS,不然CLion是真的比較好用。
開發環境設定,請參考sui官網的教學:https://docs.sui.io/build。 個人覺得蠻仔細的。
補充:因為sui的編碼一直有在更新,所以如果之後無法build跟test,只需要再重新安裝即可。
-- 語言簡介 --
suimove的語法,很多人說跟java蠻像的,大家就各自感受摟。
suimove特別之處在於,他是以物件為導向,每個生成的物件object,都會有一個Key , ID,也就是他會有一組的hash,而每個物件必須有相對應的address接收,他不可以是沒有歸屬的生成,這樣程式在編成時會報錯,這也是suimove主打的安全性,因為傳統solidity會有這方面的問題,往往會造成一些不可逆的錯誤(因為智能合約一但部署,就無法做變更),也有可能變駭客入侵破口,以及這樣有效的避免了人為的失誤。
至於什麼是物件導向,以及suimove的優劣勢,可以在YT搜尋。
這邊提供一個講解較詳細的影片提供認識suimove https://www.youtube.com/watch?v=JeD_feDQD7A
內容部分,sui有自身的框架framework,主要是藉由調用這些框架來進行編碼,所以在學習方面,就是在學習sui內的這些框架是如何運作,以及怎麼去運用。
編碼與一般語言大同小異,可分成幾個部分:
// 模組
module sandwich::shop {
// 調用框架
use sui::object::{Self,UID};
use sui::transfer;
// 結構
struct Ham has key { id:UID }
// 常數
const HAM_PRICE: u64 = 10;
const EInsufficientFunds: u64 = 001;
// 函數
fun init(ctx: &mut TxContext) {
transfer::share_object(
Grocery{id:object::new(ctx)
, profits:balance::zero<SUI>()});
transfer::transfer(
GroceryOwnerCapability {id:object::new(ctx)}
,tx_context::sender(ctx));
}
}
以上大約就是整個sui的架構,另外還有sui特有的測試函數,之後再講解。
模組 就是一個主要大架構,可以把它想像成一個人,他可以獨立完成事情,但也可以把不同的模組組合起來,這樣可以完成更多事情,也可以分工。通常越複雜的系統,相對就需要多塊模組,將不同的功能分開編碼,讓整體更加簡潔,也減少不必要的錯誤。
module sandwich::shop {
module > sandwich 專案名(資料夾名) > ::子項 > shop 模組名(檔名)
:: 代表 某物件中的某內容,有引用其中內容的意思
專案名也可用 0x0替代。
框架,可以把它理解為人的大腦,大腦裡有什麼東西,身體才能執行哪些事情。所以要把有需要運用的框架在此進行宣告。
sui move有許多框架,但主要需要的會有特定幾個,其他少數框架是看系統的需求才有需要,如果有時間可以多去看他是如何應用,未來官方也會繼續新增,例如目前suimove中就沒有所謂隨機數這樣的框架,還有待官方未來加入。
use sui::object::{Self,UID};
use > sui 為sui特有框架 > object 框架名 > {Self,UID} 要調用的結構、函數。
在調用上,會有有三種不同的型態:
use sui::object; //單:: -只單純調用此框架中的全部函數,不含結構。
use sui::object::UID; //雙:: -只單純調用此框架中的指定結構,不含函數。
use sui::object::{Self,UID}; //雙:: + {} -調用此框架中全部函數(Self),以及指定的結構。
至於sui move有哪些框架,有興趣可以到這邊:https://github.com/MystenLabs/sui/tree/main/crates/sui-framework/sources
因為我個人英文不好,所以每次在看的時候比較吃力,自己就用google直翻了一些,因為時間不多目前慢慢再整理,有些我能夠理解的,就稍微修飾過,歡迎大家使用: 有錯誤也歡迎指正修改。
https://github.com/dan0618x/sui-move-framework-chinese